package com.zenghus.single;

//懒汉式单例
    //特点：在外部类调用的时候内部类才会加载
        //内部类一定是在方法调用之前初始化（避免了线程安全）
    //这种新式兼顾了饿汉的内存浪费，也兼顾的synchronized性能问题影响
public class SingleTwo {

    //防止通过反射导致的反射破坏
    private static boolean initialized=false;

    private SingleTwo(){
        synchronized (SingleTwo.class){
            if(initialized==false){
                initialized=!initialized;
            }else{
                throw new RuntimeException("单例被侵犯！");
            }
        }
    }

    //每一个关键字都不是多余的
    //static 是为了使单例的空间共享
    //保证这个方法不会被重写，重载
    public static final SingleTwo getInstance(){
        //在返回结果以前，一定会先加载内部类
        return  SingleHolder.SINGLELZY;
    }

    private static class SingleHolder{
        //默认不加载
        private static final SingleTwo SINGLELZY=new SingleTwo();
    }

}
